import axios from 'axios'

// 创建axios实例
const api = axios.create({
  baseURL: 'http://127.0.0.1:5000/api',
  timeout: 60000 // 增加到60秒，LLM调用可能需要更长时间
})

// 创建专用于LLM调用的axios实例，超时时间更长
const llmApi = axios.create({
  baseURL: 'http://127.0.0.1:5000/api',
  timeout: 120000 // LLM专用，2分钟超时
})

// 请求拦截器 - 添加JWT令牌
api.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// LLM API请求拦截器
llmApi.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器 - 处理令牌过期
api.interceptors.response.use(
  response => response,
  error => {
    if (error.response?.status === 401) {
      // 令牌过期或无效，清除本地存储并跳转到登录页
      localStorage.removeItem('token')
      localStorage.removeItem('user')
      window.location.href = '/login'
    }
    return Promise.reject(error)
  }
)

// LLM API响应拦截器
llmApi.interceptors.response.use(
  response => response,
  error => {
    if (error.response?.status === 401) {
      // 令牌过期或无效，清除本地存储并跳转到登录页
      localStorage.removeItem('token')
      localStorage.removeItem('user')
      window.location.href = '/login'
    }
    return Promise.reject(error)
  }
)

// 认证相关API
export const auth = {
  // 用户注册
  register: (data) => api.post('/auth/register', data),
  
  // 用户登录
  login: (data) => api.post('/auth/login', data),
  
  // 用户登出
  logout: () => api.post('/auth/logout'),
  
  // 获取用户信息
  getProfile: () => api.get('/auth/profile'),
  
  // 更新用户信息
  updateProfile: (data) => api.put('/auth/profile', data),
  
  // 上传用户头像（如后端支持）
  // 注意：不要手动设置Content-Type，让浏览器自动设置multipart/form-data的boundary
  uploadAvatar: (formData) => api.put('/auth/profile/avatar', formData),
  
  // 修改密码
  changePassword: (data) => api.put('/auth/change-password', data)
}

// 管理员相关API
export const admin = {
  // 用户管理
  getUsers: (params) => api.get('/admin/users', { params }),
  getUser: (userId) => api.get(`/admin/users/${userId}`),
  updateUserRole: (userId, data) => api.put(`/admin/users/${userId}/role`, data),
  deleteUser: (userId) => api.delete(`/admin/users/${userId}`),

  // 敏感词管理
  getSensitiveWords: (params) => api.get('/admin/sensitive-words', { params }),
  addSensitiveWord: (data) => api.post('/admin/sensitive-words', data),
  updateSensitiveWord: (wordId, data) => api.put(`/admin/sensitive-words/${wordId}`, data),
  deleteSensitiveWord: (wordId) => api.delete(`/admin/sensitive-words/${wordId}`),
  batchAddSensitiveWords: (data) => api.post('/admin/sensitive-words/batch', data),

  // 语料库管理
  // 管理员上传语料库
  uploadCorpus: (formData) => api.post('/admin/corpus/upload', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  }),
  
  // 句子对管理
  getSentencePairs: (params) => api.get('/admin/sentence-pairs', { params }),
  getSentencePair: (pairId) => api.get(`/admin/sentence-pairs/${pairId}`),
  createSentencePair: (data) => api.post('/admin/sentence-pairs', data),
  updateSentencePair: (pairId, data) => api.put(`/admin/sentence-pairs/${pairId}`, data),
  deleteSentencePair: (pairId) => api.delete(`/admin/sentence-pairs/${pairId}`),
  
  // 批量操作句子对
  batchUpdateSentencePairsStatus: (data) => api.put('/admin/sentence-pairs/batch-update-status', data),
  batchDeleteSentencePairs: (data) => api.delete('/admin/sentence-pairs/batch-delete', { data })
}

/**
 * LLM问答处理接口
 * @param {Object} data - 请求数据
 * @param {string} data.prompt - 用户输入的问题
 * @returns {Promise} API响应
 */
export const llmProcess = (data) => {
  return llmApi.post('/llm/process', data)
}

// 收藏相关API
export const favorites = {
  /**
   * 添加收藏
   * @param {Object} data - 请求数据
   * @param {number} data.sentence_pair_id - 句子对ID
   * @returns {Promise} API响应
   */
  add: (data) => api.post('/favorites', data),
  
  /**
   * 取消收藏（按收藏ID）
   * @param {number} favoriteId - 收藏记录ID
   * @returns {Promise} API响应
   */
  remove: (favoriteId) => api.delete(`/favorites/${favoriteId}`),
  
  /**
   * 取消收藏（按句子对ID）
   * @param {number} pairId - 句子对ID
   * @returns {Promise} API响应
   */
  removeByPairId: (pairId) => api.delete(`/favorites/pair/${pairId}`),
  
  /**
   * 获取收藏列表
   * @param {Object} params - 查询参数
   * @param {number} params.page - 页码
   * @param {number} params.per_page - 每页数量
   * @returns {Promise} API响应
   */
  list: (params) => api.get('/favorites', { params }),
  
  /**
   * 批量检查收藏状态
   * @param {Object} data - 请求数据
   * @param {Array<number>} data.sentence_pair_ids - 句子对ID列表
   * @returns {Promise} API响应
   */
  batchCheck: (data) => api.post('/favorites/batch-check', data)
}

// 历史记录同步（服务端可选）
export const historySync = {
  save: (data) => api.post('/history', data),
  list: (params) => api.get('/history', { params }),
  detail: (historyUid) => api.get(`/history/${historyUid}`),
  remove: (historyUid) => api.delete(`/history/${historyUid}`)
}

// LLM历史记录API
export const llmHistory = {
  /**
   * 保存LLM对话历史记录
   * @param {Object} data - 请求数据
   * @param {string} data.prompt - 用户输入
   * @param {string} data.response - 模型输出
   * @param {string} data.model - 模型名称
   * @param {number} data.input_length - 输入长度
   * @param {number} data.output_length - 输出长度
   * @param {Object} data.session_state - 对话完整状态序列化
   * @returns {Promise} API响应
   */
  save: (data) => api.post('/llm-history', data),
  
  /**
   * 获取LLM历史记录列表
   * @param {Object} params - 查询参数
   * @param {number} params.limit - 返回记录数
   * @returns {Promise} API响应
   */
  list: (params) => api.get('/llm-history', { params }),
  
  /**
   * 获取单条LLM历史记录详情
   * @param {number} historyId - 历史记录ID
   * @returns {Promise} API响应
   */
  detail: (historyId) => api.get(`/llm-history/${historyId}`),
  
  /**
   * 删除LLM历史记录
   * @param {number} historyId - 历史记录ID
   * @returns {Promise} API响应
   */
  remove: (historyId) => api.delete(`/llm-history/${historyId}`)
}

// 检索历史记录API
export const searchHistory = {
  /**
   * 保存检索历史记录
   * @param {Object} data - 请求数据
   * @param {string} data.keyword - 检索关键词
   * @param {string} data.search_type - 搜索类型
   * @param {string} data.lang1 - 源语言
   * @param {string} data.lang2 - 目标语言
   * @param {number} data.threshold - 相似度阈值
   * @param {number} data.result_count - 结果数量
   * @param {Object} data.page_state - 序列化页面完整状态
   * @returns {Promise} API响应
   */
  save: (data) => api.post('/search-history', data),
  
  /**
   * 获取检索历史记录列表
   * @param {Object} params - 查询参数
   * @param {number} params.limit - 返回记录数
   * @returns {Promise} API响应
   */
  list: (params) => api.get('/search-history', { params }),
  
  /**
   * 获取单条检索历史记录详情
   * @param {number} historyId - 历史记录ID
   * @returns {Promise} API响应
   */
  detail: (historyId) => api.get(`/search-history/${historyId}`),
  
  /**
   * 删除检索历史记录
   * @param {number} historyId - 历史记录ID
   * @returns {Promise} API响应
   */
  remove: (historyId) => api.delete(`/search-history/${historyId}`)
}

// 兼容旧的API调用方式
export const login = auth.login
export const register = auth.register

export default api
